package club.service.impl;

import club.dao.UserMapper;
import club.pojo.User;
import club.dao.UserMapper;
import club.pojo.Admins;
import club.pojo.User;
import club.service.UserService;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

import java.util.List;
@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Resource
    private UserMapper userMapper; // 注入UserMapper，用于数据库操作

    /**
     * 根据用户ID查询用户信息
     * @param id 用户ID
     * @return 对应ID的用户信息，若不存在则返回null
     */
    @Override
    public User findById(Integer id) {
        // 根据ID查询用户信息
        return userMapper.selectById(id);
    }

    /**
     * 根据用户名和状态查询用户列表
     * @param userName 用户名，用于模糊查询
     * @param state 用户状态，可选，用于精确查询
     * @return 符合条件的用户列表
     */
    @Override
    public List<User> findByName(String userName, Integer state) {
        // 构建查询条件
        EntityWrapper<User> wrapper = new EntityWrapper<>();
        if (userName != null && !userName.equals("")) {
            wrapper.like("userName", userName);
        }
        if (state != null) {
            wrapper.eq("state", state);
        }
        // 查询符合条件的用户列表
        return userMapper.selectList(wrapper);
    }

    /**
     * 根据用户名模糊查询用户列表
     * @param userName 用户名，用于模糊查询
     * @return 符合条件的用户列表
     */
    @Override
    public List<User> showName(String userName) {
        // 构建查询条件
        EntityWrapper<User> wrapper = new EntityWrapper<>();
        if(userName != null && !userName.equals("")){
            wrapper.like("userName", userName);
        }
        // 查询符合条件的用户列表
        return userMapper.selectList(wrapper);
    }

    /**
     * 用户登录验证
     * @param userName 用户名
     * @param password 密码
     * @return 如果用户名和密码匹配，返回对应的用户对象；否则返回null
     */
    @Override
    public User loginuser(String userName, String password) {
        // 构建查询条件
        User user = new User();
        user.setUserName(userName);
        // 根据用户名查询用户
        User user1 = userMapper.selectOne(user);
        // 验证密码是否匹配
        if (user1 != null && user1.getPassword().equals(password)) {
            return user1; // 登录成功，返回用户对象
        }
        return null; // 登录失败，返回null
    }

    /**
     * 更新用户信息
     * @param user 待更新的用户对象
     * @return 更新操作影响的行数，通常为1
     */
    @Override
    public Integer update(User user) {
        // 执行更新操作
        return userMapper.updateById(user);
    }

    /**
     * 查询所有用户信息（分页），可以根据用户名模糊查询
     * @param userName 用户名，用于模糊查询
     * @param pageNum 当前页码
     * @param pageSize 每页显示条数
     * @return 分页后的用户信息列表
     */
    @Override
    public PageInfo<User> allUser(String userName, Integer pageNum, Integer pageSize) {
        // 使用PageHelper进行分页设置
        PageHelper.startPage(pageNum, pageSize);
        // 构建查询条件
        EntityWrapper<User> wrapper = new EntityWrapper<>();
        if (userName != null && !"".equals(userName)) {
            wrapper.like("userName", userName);
        }
        // 查询符合条件的用户列表
        List<User> list = userMapper.selectList(wrapper);
        // 封装为分页对象
        PageInfo<User> pageInfo = new PageInfo<>(list);
        return pageInfo;
    }

    /**
     * 添加新的用户信息
     * @param user 待添加的用户对象
     * @return 插入操作影响的行数，通常为1
     */
    @Override
    public int add(User user) {
        // 执行插入操作
        return userMapper.insert(user);
    }

    /**
     * 删除指定ID的用户信息
     * @param id 待删除用户的ID
     * @return 删除操作影响的行数，通常为1
     */
    @Override
    public int del(Integer id) {
        // 执行删除操作
        return userMapper.deleteById(id);
    }
}